/*************************************************************************
                           Robot  -  description
                             -------------------
    début                : 19 févr. 2012
    copyright            : (C) 2012 par francois
*************************************************************************/

//---------- Réalisation de la classe <Robot> (fichier Robot.cpp) -------

//---------------------------------------------------------------- INCLUDE

//-------------------------------------------------------- Include système
using namespace std;
#include <iostream>
#include <math.h>

//------------------------------------------------------ Include personnel
#include "Robot.h"
#include "Geometry/Vector2D.h"

using namespace livgeo;

namespace livia {
//------------------------------------------------------------- Constantes

//----------------------------------------------------------------- PUBLIC

//----------------------------------------------------- Méthodes publiques
// type Robot::Méthode ( liste des paramtres )
// Algorithme :
//
//{
//} //----- Fin de Méthode
void Robot :: rotate(float dAngle)
{
	angle += dAngle;
}

void Robot :: setAngle(float angle)
{
	this->angle = angle;
}

void Robot :: move (float distance)
{
	Vector2D vect(-sin(angle) * distance, cos(angle) * distance);
	position += vect;

#ifdef DEBUG
	if (this->position.getX() < 0 || this->position.getY() < 0)
		cerr << "Overflow sur la position du robot dans Robot::move" << endl;
#endif

}

void Robot :: setPosition(float x, float y)
{
	position.setX(x);
	position.setY(y);

#ifdef DEBUG
	if (this->position.getX() < 0 || this->position.getY() < 0)
		cerr << "Overflow sur la position du robot dans Robot::move" << endl;
#endif

}

void Robot :: setX(float x)
{
	position.setX(x);

#ifdef DEBUG
	if (this->position.getX() < 0 || this->position.getY() < 0)
		cerr << "Overflow sur la position du robot dans Robot::setX" << endl;
#endif
}

void Robot :: setY (float y)
{
	position.setY(y);

#ifdef DEBUG
	if (this->position.getX() < 0 || this->position.getY() < 0)
		cerr << "Overflow sur la position du robot dans Robot::setY" << endl;
#endif


}

//------------------------------------------------- Surcharge d'opérateurs

//-------------------------------------------- Constructeurs - destructeur

Robot::Robot ( float x, float y, float angle) :
		position(x, y), angle(angle)
// Algorithme :
//
{
} //----- Fin de Robot


Robot::~Robot ( )
// Algorithme :
//
{
#ifdef MAP
    cout << "Appel au destructeur de <Robot>" << endl;
#endif
} //----- Fin de ~Robot


//------------------------------------------------------------------ PRIVE

//----------------------------------------------------- Méthodes protégées

}; // ----- fin de namespace livia
